package utils

import (
	"fmt"
	"regexp"
	"strings"

	"github.com/mozillazg/go-pinyin"
)

// 获取汉字的拼音字符串
func GetPinyin(hans string) string {
	cleaned := strings.ReplaceAll(hans, " ", "")

	isEnglish := true
	for _, r := range cleaned {
		if r > 127 { // 非ASCII字符，认为是中文
			isEnglish = false
			break
		}
	}

	if isEnglish {
		return cleaned
	}

	args := pinyin.NewArgs()
	args.Style = pinyin.Normal // 无音调

	pinyinSlice := pinyin.Pinyin(hans, args)
	var result []string
	for _, py := range pinyinSlice {
		if len(py) > 0 {
			result = append(result, py[0])
		}
	}

	return strings.Join(result, "")
}

func FixDateString(dateStr string) string {
	if dateStr == "" {
		return ""
	}

	// 移除所有非数字字符，检查是否为纯数字日期
	digitsOnly := regexp.MustCompile(`\D`).ReplaceAllString(dateStr, "")

	if len(digitsOnly) == 8 && isAllDigits(digitsOnly) {
		// YYYYMMDD 格式
		return fmt.Sprintf("%s-%s-%s", digitsOnly[0:4], digitsOnly[4:6], digitsOnly[6:8])
	} else if len(digitsOnly) == 6 && isAllDigits(digitsOnly) {
		// YYMMDD 格式
		return fmt.Sprintf("20%s-%s-%s", digitsOnly[0:2], digitsOnly[2:4], digitsOnly[4:6])
	}

	// 统一将各种分隔符替换为点号
	re := regexp.MustCompile(`[/\-年月日]`)
	normalized := re.ReplaceAllString(dateStr, ".")

	// 按点号分割
	parts := strings.Split(normalized, ".")
	if len(parts) < 3 {
		return dateStr // 不符合日期格式
	}

	// 处理年份
	year := parts[0]
	if len(year) == 2 {
		// 简写年份，假设是20xx年
		year = "20" + year
	}

	// 处理月份，补零
	month := parts[1]
	if len(month) == 1 {
		month = "0" + month
	}

	// 处理日期，补零
	day := parts[2]
	if len(day) == 1 {
		day = "0" + day
	}

	// 验证数字
	if !isAllDigits(year) || !isAllDigits(month) || !isAllDigits(day) {
		return dateStr
	}

	return fmt.Sprintf("%s-%s-%s", year, month, day)
}

func isAllDigits(s string) bool {
	for _, c := range s {
		if c < '0' || c > '9' {
			return false
		}
	}
	return true
}
